from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from tasks.models import Category, Tag, Task
from django.utils import timezone
from datetime import timedelta

User = get_user_model()

class Command(BaseCommand):# BaseCommand是Django提供的一个命令基类，用于创建自定义命令
    help = '初始化示例数据'

    def handle(self, *args, **options):# handle方法用于定义命令的执行逻辑
        # 创建测试用户
        if not User.objects.filter(email='test@example.com').exists():
            test_user = User.objects.create_user(
                email='test@example.com',
                username='test_user',
                password='test123'
            )
            self.stdout.write(self.style.SUCCESS('成功创建测试用户 test_user'))
        else:
            test_user = User.objects.get(email='test@example.com')
            self.stdout.write(self.style.SUCCESS('测试用户 test_user 已存在'))

        # 创建分类
        categories = [
            {'name': '工作', 'description': '工作相关任务'},
            {'name': '学习', 'description': '学习相关任务'},
            {'name': '生活', 'description': '生活相关任务'},
            {'name': '娱乐', 'description': '娱乐相关任务'},
        ]
        
        for category_data in categories:
            category, created = Category.objects.get_or_create(# 这个方法：如果对象存在，则返回该对象；如果不存在，则创建一个新的对象并返回
                name=category_data['name'],
                defaults={'description': category_data['description']}#如果需要创建对象，则可以使用defaults参数指定默认值
            )#返回值：created：布尔值，表示是否创建了新对象（True 表示创建，False 表示已存在）
            if created:
                self.stdout.write(self.style.SUCCESS(f'成功创建分类: {category.name}'))

        # 创建标签
        tags = [
            {'name': '重要', 'color': '#FF0000'},
            {'name': '紧急', 'color': '#FFA500'},
            {'name': '日常', 'color': '#008000'},
            {'name': '长期', 'color': '#0000FF'},
        ]
        
        for tag_data in tags:
            tag, created = Tag.objects.get_or_create(
                name=tag_data['name'],
                defaults={'color': tag_data['color']}
            )
            if created:
                self.stdout.write(self.style.SUCCESS(f'成功创建标签: {tag.name}'))

        # 创建示例任务
        work_category = Category.objects.get(name='工作')
        study_category = Category.objects.get(name='学习')
        
        important_tag = Tag.objects.get(name='重要')
        urgent_tag = Tag.objects.get(name='紧急')
        daily_tag = Tag.objects.get(name='日常')
        
        tasks = [
            {
                'title': '完成项目文档',
                'description': '编写项目API文档和用户手册',
                'due_date': timezone.now() + timedelta(days=3),
                'priority': 'H',
                'status': 'P',
                'category': work_category,
                'tags': [important_tag, urgent_tag]
            },
            {
                'title': '学习Django REST framework',
                'description': '完成Django REST framework的进阶学习',
                'due_date': timezone.now() + timedelta(days=7),
                'priority': 'M',
                'status': 'I',
                'category': study_category,
                'tags': [important_tag]
            },
            {
                'title': '每日代码练习',
                'description': '完成至少2小时的编程练习',
                'due_date': timezone.now() + timedelta(days=1),
                'priority': 'L',
                'status': 'P',
                'category': study_category,
                'tags': [daily_tag]
            },
            {
                'title': '项目进度会议',
                'description': '与团队成员讨论项目进度和下一步计划',
                'due_date': timezone.now() + timedelta(days=2),
                'priority': 'H',
                'status': 'P',
                'category': work_category,
                'tags': [important_tag, urgent_tag]
            },
            {
                'title': '完成数据库设计',
                'description': '设计并实现项目数据库结构',
                'due_date': timezone.now() + timedelta(days=5),
                'priority': 'M',
                'status': 'C',
                'category': work_category,
                'tags': [important_tag]
            }
        ]
        
        for task_data in tasks:
            task, created = Task.objects.get_or_create(
                title=task_data['title'],
                defaults={
                    'description': task_data['description'],
                    'due_date': task_data['due_date'],
                    'priority': task_data['priority'],
                    'status': task_data['status'],
                    'category': task_data['category'],
                    'created_by': test_user
                }
            )
            if created:
                task.tags.set(task_data['tags'])
                self.stdout.write(self.style.SUCCESS(f'成功创建任务: {task.title}'))

        self.stdout.write(self.style.SUCCESS('数据初始化完成！')) 